
#pragma once
#include <netinet/in.h>
#include "event_loop.h"
#include "tcp_conn.h"
#include  "message.h"
#include <unordered_map>
class tcp_server
{

public:
    tcp_server(event_loop *loop, const char *ip, uint16_t port);
    ~tcp_server();
    void do_accept();
    void add_message_router(int msgid,message_callback* mgc,void* user_data=nullptr){
        router_.register_msg_router(msgid,mgc,user_data);
    }
private:
#define MAX_CON 2
    static int _max_con_ ; //最大的链接数
    static int _cur_conn; //当前链接刻度
    static pthread_mutex_t _conns_mutex; //保护_curr_conns刻度修改的锁
private:
    int _sockfd;                  // 套接字
    struct sockaddr_in _connaddr; // 客户端链接地址
    socklen_t _addrlen;           // 客户端链接地址
    event_loop *_loop;
public:
    static std::unordered_map<int,tcp_conn*> conns;
    static void increase_conn(int connfd,tcp_conn* conn);    //增加一个链接
    static void decrease_conn(int connfd);    //删除一个链接
    static void get_conn_num(int* cur_conn);   //获得当前链接的刻度
    static message_router router_;
};

void lars_hello();